package com.potenzacd.project.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * <p>
 * 项目信息
 * </p>
 *
 * @author Apollo
 * @since 2021-01-16
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ProjectInfo implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键自增
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 业务标识
     */
    private String code;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 修改时间
     */
    private Date updateTime;

    /**
     * 名称
     */
    private String backdrop;

    /**
     * 简介
     */
    private String des;

    /**
     * 行业的ID
     */
    private Integer dicIndustryId;

    /**
     * 项目类型
     */
    private Integer dicProjectTypeId;

    /**
     * 项目的名称
     */
    private String name;

    /**
     * 周期
     */
    private Double period;

    /**
     * 周期单位 1：小时  2：天  3：月  4：年
     */
    private Integer periodUnit;


    /**
     * 产品基本信息状态
     * 1:草稿  2:待审核  3:审核通过  4:审核失败  5:变更中  6:变更成功  7:变更失败  8:已发布  9:已作废
     */
    private Integer status;

    /**
     * 架构设计信息状态
     * 1:草稿  2:待审核  3:审核通过  4:审核失败  5:变更中  6:变更成功  7:变更失败  8:已发布  9:已作废
     */
    private Integer architectureInfoStatus;

    /**
     * 数据库设计信息状态
     * 1:草稿  2:待审核  3:审核通过  4:审核失败  5:变更中  6:变更成功  7:变更失败  8:已发布  9:已作废
     */
    private Integer dataBaseDesignInfoStatus;

    /**
     * 接口设计的状态
     * 1:草稿  2:待审核  3:审核通过  4:审核失败  5:变更中  6:变更成功  7:变更失败  8:已发布  9:已作废
     */
    private Integer interfaceDesignInfoStatus;


    /**
     * 团队评估信息的状态
     * 1:草稿  2:待审核  3:审核通过  4:审核失败  5:变更中  6:变更成功  7:变更失败  8:已发布  9:已作废
     */
    private Integer teamEvaluateInfoStatus;

    /**
     * 技术选型信息状态
     * 1:草稿  2:待审核  3:审核通过  4:审核失败  5:变更中  6:变更成功  7:变更失败  8:已发布  9:已作废
     */
    private Integer technologySelectionInfoStatus;

    /**
     * 工作量评估的状态
     * 1:草稿  2:待审核  3:审核通过  4:审核失败  5:变更中  6:变更成功  7:变更失败  8:已发布  9:已作废
     */
    private Integer workloadInfoStatus;

    /**
     * 用户的标识
     */
    private String userCode;

    /**
     * 架构信息
     */
    @TableField(exist = false)
    private List<ArchitectureInfo> architectureInfos;

    /**
     * 技术选型信息
     */
    @TableField(exist = false)
    private List<TechnologySelectionInfo> technologySelectionInfos;


    /**
     * 接口模块设计
     */
    @TableField(exist = false)
    private List<InterfaceModuleInfo> interfaceModuleInfos;


    /**
     * 数据库设计
     */
    @TableField(exist = false)
    private List<DataBaseDesignInfo> dataBaseDesignInfos;

    /**
     * 工作量评估信息
     */
    @TableField(exist = false)
    private List<WorkloadInfo> workloadInfos;

    /**
     * 团队成员信息
     */
    @TableField(exist = false)
    private List<TeamEvaluateInfo> teamEvaluateInfos;




    /**
     * 产品的常量类型
     */
    public static class Status{

        /**
         * 草稿
         */
        public static final Integer STATUS_DRAFT = 1;


        /**
         * 待审核
         */
        public static final Integer STATUS_WAIT_APPROVAL = 2;

        /**
         * 审核通过
         */
        public static final Integer STATUS_APPROVAL_PASS = 3;

        /**
         * 审核失败
         */
        public static final Integer STATUS_APPROVAL_FAIL = 4;

        /**
         * 变更待审核(变更中)
         */
        public static final Integer STATUS_CHANGING_WAIT_APPROVAL = 5;

        /**
         * 变更成功
         */
        public static final Integer STATUS_CHANGING_SUCCESS = 6;

        /**
         * 变更失败
         */
        public static final Integer STATUS_CHANGING_FAIL = 7;

        /**
         * 已发布
         */
        public static final Integer STATUS_PUBLISH = 8;

        /**
         * 作废
         */
        public static final Integer STATUS_ABORT = 9;

    }

}
